﻿using System.Data;
using System;
using Negocio.View.Base;
using System.Runtime.CompilerServices;
using Negocio.Generico;

namespace Negocio.View
{

    /// <summary>
    /// View de las personas
    /// </summary>
    public class RenglonDocumentacionView : ViewBase
    {
        #region Singleton

        private static RenglonDocumentacionView instance = null;

        private RenglonDocumentacionView()
        {
            //Vacio
        }

        [MethodImpl(MethodImplOptions.Synchronized)]
        public static RenglonDocumentacionView GetInstance()
        {
            if (instance == null)
            {
                instance = new RenglonDocumentacionView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Codigo de la renglon
        /// </summary>
        private const string CODIGORENGLON = "CODIGORENGLON";

        /// <summary>
        /// Codigo del renglon documentacion
        /// </summary>
        private const string CODIGORENGLONDOCUMENTACION = "CODIGORENGLONDOCUMENTACION";

        /// <summary>
        /// Fecha de entrega
        /// </summary>
        private const string FECHAENTREGA = "FECHAENTREGA";

        /// <summary>
        /// Codigo del Alumno
        /// </summary>
        private const string CODIGOALUMNO = "CODIGOALUMNO";

        /// <summary>
        /// Calificacion practica
        /// </summary>
        private const string CALIFICACIONPRACTICA = "CALIFICACIONPRACTICA";

        /// <summary>
        /// Codigo de convocatoria
        /// </summary>
        private const string CODIGOCONVOCATORIA = "CODIGOCONVOCATORIA";

        private const string NOMBREALUMNO = "NOMBREALUMNO";

        private const string APELLIDO1ALUMNO = "APELLIDO1ALUMNO";

        private const string APELLIDO2ALUMNO = "APELLIDO2ALUMNO";

        private const string DNIALUMNO = "DNIALUMNO";

        #endregion

        #region View

        /// <summary>
        /// Devuelve un DataView contenedor de los renglones documentacion sin parametros de busqueda
        /// </summary>
        /// <returns>Obtiene un data view con todos lo renglones de documentacion</returns>
        public DataView GetRenglonDocumentacionView() 
        {
            return this.GetRenglonDocumentacionView(new RenglonDocumentacionDTO());
        }

        /// <summary>
        /// Muestra un DataView de renglon Documentacion
        /// </summary>
        /// <returns>DataView con todos los datos</returns>
        public DataView GetRenglonDocumentacionView(RenglonDocumentacionDTO filtro)
        {
            try
            {
                DataView dv = new DataView();
                DataTable dt = new DataTable("RenglonDocumentacion");

                dt.Columns.Add(RenglonDocumentacionView.CODIGORENGLON, this.GetTypeInt32);
                dt.Columns.Add(RenglonDocumentacionView.CODIGORENGLONDOCUMENTACION, this.GetTypeInt32);
                dt.Columns.Add(RenglonDocumentacionView.FECHAENTREGA, this.GetTypeString);
                dt.Columns.Add(RenglonDocumentacionView.CODIGOALUMNO, this.GetTypeInt32);
                dt.Columns.Add(RenglonDocumentacionView.CALIFICACIONPRACTICA, this.GetTypeSqlDouble);
                dt.Columns.Add(RenglonDocumentacionView.CODIGOCONVOCATORIA, this.GetTypeInt32);
                dt.Columns.Add(RenglonDocumentacionView.NOMBREALUMNO, this.GetTypeString);
                dt.Columns.Add(RenglonDocumentacionView.APELLIDO1ALUMNO, this.GetTypeString);
                dt.Columns.Add(RenglonDocumentacionView.APELLIDO2ALUMNO, this.GetTypeString);
                dt.Columns.Add(RenglonDocumentacionView.DNIALUMNO, this.GetTypeString);

                using (Negocio.Generico.ContratoGenericoClient servicio = new Negocio.Generico.ContratoGenericoClient())
                {
                    foreach (RenglonDocumentacionDTO bean in servicio.Get(filtro))
                    {
                        DataRow fila = dt.NewRow();

                        fila[RenglonDocumentacionView.CODIGORENGLON] = bean.CoRenglon;
                        fila[RenglonDocumentacionView.CODIGORENGLONDOCUMENTACION] = bean.CoRenglonDocumentacion;
                        fila[RenglonDocumentacionView.FECHAENTREGA] = bean.FchEntrega;
                        fila[RenglonDocumentacionView.CODIGOALUMNO] = bean.CoAlumno;
                        if (bean.CalificacionPractica != null)
                        {
                            fila[RenglonDocumentacionView.CALIFICACIONPRACTICA] = bean.CalificacionPractica;
                        }
                        else { fila[RenglonDocumentacionView.CALIFICACIONPRACTICA]=DBNull.Value; }
                        fila[RenglonDocumentacionView.CODIGOCONVOCATORIA] = bean.CoConvocatoria;
                        fila[RenglonDocumentacionView.NOMBREALUMNO] = bean.NombreAlumno;
                        fila[RenglonDocumentacionView.APELLIDO1ALUMNO] = bean.Apellido1Alumno;
                        fila[RenglonDocumentacionView.APELLIDO2ALUMNO] = bean.Apellido2Alumno;
                        fila[RenglonDocumentacionView.DNIALUMNO] = bean.DniAlumno;

                        dt.Rows.Add(fila);
                    }
                }
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }
        }

        #endregion
    }
}